home *** CD-ROM | disk | FTP | other *** search
/ Aminet 49 / Aminet 49 (2002)(GTI - Schatztruhe)[!][Jun 2002].iso / Aminet / util / sys / AmberRAM.lha / AmberRAM / Source / handler.h < prev    next >
C/C++ Source or Header  |  2002-01-21  |  3KB  |  139 lines

  1. /*
  2.  
  3. File: handler.h
  4. Author: Neil Cafferkey
  5. Copyright (C) 2001-2002 Neil Cafferkey
  6.  
  7. This program is free software; you can redistribute it and/or
  8. modify it under the terms of the GNU General Public License
  9. as published by the Free Software Foundation; either version 2
  10. of the License, or (at your option) any later version.
  11.  
  12. This program is distributed in the hope that it will be useful,
  13. but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. GNU General Public License for more details.
  16.  
  17. You should have received a copy of the GNU General Public License
  18. along with this program; if not, write to the Free Software
  19. Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  20. MA 02111-1307, USA.
  21.  
  22. */
  23.  
  24. #ifndef HANDLER_H
  25. #define HANDLER_H
  26.  
  27.  
  28. #include <dos/dos.h>
  29. #include <dos/dosextens.h>
  30. #include <dos/filehandler.h>
  31. #include <dos/notify.h>
  32. #include <exec/memory.h>
  33. #include <utility/utility.h>
  34.  
  35. #include <proto/exec.h>
  36. #include <proto/dos.h>
  37. #include <proto/alib.h>
  38. #include <proto/locale.h>
  39. #include <proto/utility.h>
  40.  
  41.  
  42. typedef ULONG UPINT;
  43. typedef LONG PINT;
  44.  
  45. #ifndef MEM_BLOCKSHIFT
  46. #define MEM_BLOCKSHIFT 3
  47. #endif
  48.  
  49. #define MIN(A,B) (((A)<(B))?(A):(B))
  50. #define MEMBLOCKS(A) (((A)-1>>(MEM_BLOCKSHIFT))+1);
  51. #define HARDLINK(A) (struct Object *)(((BYTE *)(A))-(UPINT)&((struct Object *)NULL)->hard_link)
  52. #define DOSBOOL(A) ((A)?DOSTRUE:DOSFALSE)
  53.  
  54. #define MIN_BLOCK_SIZE 64
  55. #define MAX_BLOCK_SIZE 0x8000
  56. #define DOS_VERSION 39
  57. #define UTILITY_VERSION 37
  58. #define LOCALE_VERSION 38
  59.  
  60.  
  61. struct Block
  62. {
  63.    struct MinNode node;
  64.    UWORD length;            /* number of data bytes */
  65. };
  66.  
  67.  
  68. struct Lock
  69. {
  70.    struct FileLock lock;
  71.    struct MinList openings;
  72.    UPINT lock_count;
  73.    BOOL changed;
  74. };
  75.  
  76.  
  77. struct Object
  78. {
  79.    struct Node node;
  80.    UWORD end_length;        /* number of valid bytes in last data block */
  81.    struct MinList elements;
  82.    UPINT length;            /* logical length in bytes for a file */
  83.    UPINT block_count;       /* number of memory blocks */
  84.    struct Lock *lock;
  85.    struct Object *parent;
  86.    struct DateStamp date;
  87.    ULONG protection;
  88.    STRPTR comment;
  89.    struct MinNode hard_link;
  90. };
  91.  
  92.  
  93. struct Opening
  94. {
  95.    struct MinNode node;
  96.    struct Object *file;
  97.    UPINT pos;
  98.    struct Block *block;
  99.    UPINT block_pos;
  100. };
  101.  
  102.  
  103. struct Notification
  104. {
  105.    struct MinNode node;
  106.    struct NotifyRequest *request;
  107.    struct Object *object;
  108. };
  109.  
  110.  
  111. struct Handler
  112. {
  113.    struct Object *root_dir;
  114.    struct DosList *volume;
  115.    struct MsgPort *proc_port;
  116.    struct MsgPort *notify_port;
  117.    UPINT block_count;
  118.    UPINT lock_count;
  119.    struct Locale *locale;
  120.    ULONG min_block_size;
  121.    ULONG max_block_size;
  122.    BOOL locked;
  123.    struct MinList notifications;
  124. };
  125.  
  126.  
  127.  
  128. /* Global variables */
  129.  
  130. GLOBAL struct ExecBase *SysBase;
  131. GLOBAL struct DosLibrary *DOSBase;
  132. GLOBAL struct UtilityBase *UtilityBase;
  133. GLOBAL struct LocaleBase *LocaleBase;
  134.  
  135.  
  136. #endif
  137.  
  138.  
  139.